﻿'Nombre:                         Manejador
'Descripcion:                    Clase que controla todas las operaciones sobre el catalogo de titulares
'Dependencias:                 
'Fecha de creación:              20090613
'Autor:                          VMORALES
'Fecha de modifcación:         
'Responsable:                  
'Num. de modifcación:            0

Option Explicit On
Option Strict On

#Region "Imports"

Imports Electrocucaracha.AdminPersonal.DAO
Imports System.Linq
Imports Electrocucaracha.AdminPersonal.Utils.Manejador

#End Region

Namespace Titular

    ''' <summary>
    ''' Clase que controla todas las operaciones sobre el catalogo de titulares
    ''' </summary>
    Public Class Manejador

#Region "Constantes"

#End Region

#Region "Miembros"

        Public Shared Event TitularCambiado()
        Public Shared Event TitularesCambiados()
        Public Shared Event TitularesActivosCambiados()

        Private Shared _dao As ITitularDao = Nothing                         'Clase de acceso a los datos en la base de datos
        Private Shared _titularesRegistrados As Entidades.TitularDTO() = Dao.Obtener()       'Cache de titulares registrados en la base de datos
        Private Shared _titularSeleccionado As Entidades.TitularDTO = Nothing          'Titular el cual se encuentra seleccionado para trabajar
        Private Shared _titularesActivosRegistrados As Entidades.TitularDTO() = Dao.ObtenerActivos() 'Cache de titulares activos registrados en la base de datos

#End Region

#Region "Propiedades"

        ''' <summary>
        ''' Clase de acceso a los datos en la base de datos
        ''' </summary>
        ''' <value></value>
        ''' <returns>Unica instancia para el manejo de datos</returns>
        Public Shared ReadOnly Property Dao() As ITitularDao
            Get
                If _dao Is Nothing Then
                    _dao = DirectCast(Application.Ctx.GetObject("TitularDao"), ITitularDao)
                End If

                Return _dao
            End Get
        End Property

        ''' <summary>
        ''' Cache de titulares registrados en la base de datos
        ''' </summary>
        ''' <value>Conjunto de instancias de titulares</value>
        ''' <returns></returns>
        Public Shared Property Titulares() As Entidades.TitularDTO()
            Private Set(ByVal value As Entidades.TitularDTO())
            End Set
            Get
                Manejador.Titulares = Dao.Obtener()
                Return _titularesRegistrados
            End Get
        End Property

        ''' <summary>
        ''' Titular el cual se encuentra seleccionado para trabajar
        ''' </summary>
        ''' <value>Titular seleccionado en la aplicacion a ser validado contra lo existente en la base de datos</value>
        ''' <returns>Instancia del titular actual</returns>
        Public Shared Property Seleccion() As Entidades.TitularDTO
            Get
                Return _titularSeleccionado
            End Get
            Set(ByVal value As Entidades.TitularDTO)
                Dim existe As Boolean = Dao.Existe(value)

                If Not value.Equals(_titularSeleccionado) AndAlso existe Then
                    _titularSeleccionado = value
                    RaiseEvent TitularCambiado()
                ElseIf Not existe Then
                    Throw New ArgumentException("No existe el titular seleccionado")
                End If
            End Set
        End Property

        ''' <summary>
        ''' Cache de titulares activos registrados en la base de datos
        ''' </summary>
        ''' <value>Conjunto de instancias de titulares</value>
        ''' <returns></returns>
        Public Shared Property TitularesActivos() As Entidades.TitularDTO()
            Private Set(ByVal value As Entidades.TitularDTO())
                If Not value.Equals(_titularesActivosRegistrados) Then
                    _titularesActivosRegistrados = value
                    RaiseEvent TitularesActivosCambiados()
                End If
            End Set
            Get
                Return _titularesActivosRegistrados
            End Get
        End Property

#End Region

#Region "Contructores"

#End Region

#Region "Funciones"

#End Region

    End Class

End Namespace